/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GameLogic;

import java.util.List;


/**
 * @author ix
 */

public interface IGame
{
    //                           HEA   MED   LIG   NONE
    double[][] DamageFactor = { {1.00, 1.00, 1.00, 1.00},
                                {0.75, 1.00, 1.25, 1.25},
                                {1.25, 1.00, 0.75, 1.25}};
    
    int STARTING_GOLD = 1500;
    double SELL_COEFFICIENT = 0.75;
    double ARMOR_MULTIPLIER = 0.05;
    
    public interface Updatable
    {
        public void onUpdate();
    }
    
    void SetOnUpdate(Updatable c);
    
    
    int GetCurrentLevel();
    Game.GameState GetCurrentState();
    int GetLives();
    int GetKills();
    int GetCurrentGold();
    
    void StartNextWave();
    double GetTimeToWave();
    
    boolean BuildTower(TowerType t, int x, int y);
    
    boolean isPlaying();
    void setOnGameFinish(Runnable r);
    public boolean getFinishState();
    public boolean canBuildTowerType(TowerType tt);
    ITower[] GetTowers();
    int GetTowersCount();
    IMissile[] GetMissiles();
    int GetMissilesCount();
    IMob[] GetMobs();
    int GetMobsCount();
    int GetMobsAlive();
    ITower UpgradeTower(ITower t);
    boolean[][] GetTowerMap();
    
    //LinkedList<Point> GetMobsAlive();
    
    /*
    //gets the buildable/walkable state of the mapfile
    boolean GetOrigWalkable(int x, int y);
    void GetOrigBuildable(int x, int y, boolean Buildable);
    
    //get.set current walkability of a cell (i.e. non-built and walkable)
    boolean GetWalkable(int x, int y);
    void SetWalkable(int x, int y, boolean Walkable);
    
    //get.set current buildability of a cell
    boolean GetBuildable(int x, int y);
    void GetBuildable(int x, int y, boolean Buildable);
    */
}